/*
 * 版权所有 (C) 2018 知启蒙(ZHIQIM) 保留所有权利。
 * 
 * 欢迎到知启蒙网站（https://www.zhiqim.com）购买正版软件，知启蒙还提供许多开源框架和软件。
 * 
 * 1、本软件产品所有源代码受《中华人民共和国著作权法》和其他有关法律、法规的保护，其所有知识产权归湖南知启蒙科技有限公司所有；
 * 2、禁止复制和修改。不得复制修改、翻译或改编本软件所有源代码，或者基于本软件产品创作衍生作品；
 * 3、禁止进行逆向工程。不得对本软件的源代码进行逆向工程、反编译或试图以其他方式发现软件的源代码；
 * 4、个别授权：如需进行商业性的销售、复制、分发，包括但不限于软件销售、预装、捆绑等，必须获得知启蒙的书面授权和许可；
 * 5、保留权利：本注释未明示授权的其他一切权利仍归知启蒙所有，任何人使用其他权利时必须获得知启蒙的书面同意。
 */
package net.redxyz.repost.resource.model;

import org.zhiqim.kernel.annotation.AnAlias;
import org.zhiqim.kernel.json.Jsons;
import org.zhiqim.kernel.util.Urls;
import org.zhiqim.kernel.util.Validates;

/**
 * 淘宝会话令牌
 *
 * @version v1.0.0 @author zouzhigang 2014-3-21 新建与整理
 */
public class SessionToken
{
    private String token;
    
    @AnAlias("taobao_user_id")
    private String userId;
    
    @AnAlias("taobao_user_nick")
    private String nick;
    
    @AnAlias("taobao_open_uid")
    private String openUid;
    
    @AnAlias("sub_taobao_user_id")
    private String subUserId;
    
    @AnAlias("sub_taobao_user_nick")
    private String subNick;
    
    @AnAlias("access_token")
    private String sessionId;
    
    @AnAlias("expires_in")
    private int expiresIn;
    
    @AnAlias("r1_expires_in")
    private int expiresInR1;
    
    @AnAlias("r2_expires_in")
    private int expiresInR2;
    
    @AnAlias("w1_expires_in")
    private int expiresInW1;
    
    @AnAlias("w2_expires_in")
    private int expiresInW2;
    
    @AnAlias("refresh_token")
    private String refreshToken;
    
    @AnAlias("re_expires_in")
    private int reExpiresIn;
    

    
    /**
     * 解析令牌数据
     * 
     * @param token 令牌数据
     * @return      得到解析后的会话令牌对象
     */
    public static SessionToken parseSessionToken(String token)
    {
        //去除空字符串和解码保存到数据库
        token = Urls.decodeUTF8(token);
        token = Jsons.removeBlankSpace(token);
        
        SessionToken sessionToken = Jsons.toObject(token, SessionToken.class);
        sessionToken.token = token;
        
        return sessionToken;
    }
    
    public String toString()
    {
        return token;
    }
    
    public boolean isInValid()
    {
        return Validates.isEmpty(userId) || Validates.isEmpty(nick);
    }
    
    public boolean isInValidParam()
    {
        return  Validates.isEmpty(sessionId) || 
                Validates.isEmpty(refreshToken) || 
                expiresIn == -1 ||
                expiresInR1 == -1 || 
//                expiresInR2 == -1 || 
                expiresInW1 == -1 || 
//                expiresInW2 == -1 || 
                reExpiresIn == -1;
    }
    
    public boolean hasSubNick()
    {
        return Validates.isNotEmpty(subNick);
    }
    
    public String getNickLogined()
    {
        return hasSubNick()?subNick:nick;
    }

    public String getToken()
    {
        return token;
    }

    public String getUserId()
    {
        return userId;
    }

    public String getNick()
    {
        return nick;
    }

    public String getSessionId()
    {
        return sessionId;
    }

    public int getExpiresIn()
    {
        return expiresIn;
    }

    public int getExpiresInR1()
    {
        return expiresInR1;
    }

    public int getExpiresInR2()
    {
        return expiresInR2;
    }

    public int getExpiresInW1()
    {
        return expiresInW1;
    }

    public int getExpiresInW2()
    {
        return expiresInW2;
    }

    public void setExpiresInW2(int expiresInW2)
    {
        this.expiresInW2 = expiresInW2;
    }

    public String getRefreshToken()
    {
        return refreshToken;
    }

    public int getReExpiresIn()
    {
        return reExpiresIn;
    }

    public String getSubNick()
    {
        return subNick;
    }

    public String getOpenUid() {
        return openUid;
    }

    public void setOpenUid(String openUid) {
        this.openUid = openUid;
    }

    public String getSubUserId() {
        return subUserId;
    }

    public void setSubUserId(String subUserId) {
        this.subUserId = subUserId;
    }
    
}
